package zielu.gittoolbox.ui.config; import com.intellij.ui.ListCellRendererWrapper; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.DefaultComboBoxModel; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import org.jetbrains.annotations.NotNull; import zielu.gittoolbox.ResBundle; import zielu.gittoolbox.ui.StatusPresenter; import zielu.gittoolbox.ui.StatusPresenters; import zielu.gittoolbox.ui.util.CheckBoxWithColorChooserEx; public class GtForm implements GtFormUi { private JComboBox presentationMode; private JPanel content; private JCheckBox showGitStatCheckBox; private JCheckBox showProjectViewStatusCheckBox; private JCheckBox behindTrackerEnabledCheckBox; private JCheckBox showLocationPathCheckBox; private JCheckBox showStatusBeforeLocationCheckBox; private JLabel presentationStatusBarPreview; private JLabel presentationProjectViewPreview; private CheckBoxWithColorChooserEx projectViewStatusColorChooser; private JCheckBox projectViewStatusBoldCheckBox; private JCheckBox projectViewStatusItalicCheckBox; protected void createUIComponents() { projectViewStatusColorChooser = new CheckBoxWithColorChooserEx(ResBundle.getString("configurable.app.showProjectViewStatusColor.label")); } @Override public void init() { presentationMode.setRenderer(new ListCellRendererWrapper<StatusPresenter>() { @Override public void customize(JList jList, StatusPresenter presenter, int index, boolean isSelected, boolean hasFocus) { setText(presenter.getLabel()); } }); presentationMode.setModel(new DefaultComboBoxModel(StatusPresenters.values())); presentationMode.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { StatusPresenter presenter = getPresenter(); presentationStatusBarPreview.setText(getStatusBarPreview(presenter)); presentationProjectViewPreview.setText(getProjectViewPreview(presenter)); } }); showProjectViewStatusCheckBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { onProjectViewStatusChange(); } }); showLocationPathCheckBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { onProjectViewStatusChange(); } }); } @Override public void dispose() { projectViewStatusColorChooser.dispose(); } private String getStatusBarPreview(StatusPresenter presenter) { return presenter.aheadBehindStatus(3, 2) + " | " + presenter.aheadBehindStatus(3, 0) + " | " + presenter.aheadBehindStatus(0, 2); } private String getProjectViewPreview(StatusPresenter presenter) { return presenter.nonZeroAheadBehindStatus(3, 2) + " | " + presenter.nonZeroAheadBehindStatus(3, 0) + " | " + presenter.nonZeroAheadBehindStatus(0, 2); } private void onProjectViewStatusChange() { boolean enabled = showProjectViewStatusCheckBox.isSelected(); showLocationPathCheckBox.setEnabled(enabled); projectViewStatusColorChooser.setEnabled(enabled); projectViewStatusBoldCheckBox.setEnabled(enabled); projectViewStatusItalicCheckBox.setEnabled(enabled); if (enabled) { showStatusBeforeLocationCheckBox.setEnabled(showLocationPathCheckBox.isSelected()); } else { showStatusBeforeLocationCheckBox.setEnabled(false); } } @Override public void afterStateSet() { onProjectViewStatusChange(); } @Override public JComponent getContent() { return content; } public void setPresenter(StatusPresenter presenter) { presentationMode.setSelectedItem(presenter); } public StatusPresenter getPresenter() { return (StatusPresenter) presentationMode.getSelectedItem(); } public void setShowGitStatus(boolean showGitStatus) { showGitStatCheckBox.setSelected(showGitStatus); } public boolean getShowGitStatus() { return showGitStatCheckBox.isSelected(); } public boolean getBehindTrackerEnabled() { return behindTrackerEnabledCheckBox.isSelected(); } public void setBehindTrackerEnabled(boolean behindTrackerEnabled) { behindTrackerEnabledCheckBox.setSelected(behindTrackerEnabled); } public void setShowProjectViewStatus(boolean showProjectViewStatus) { showProjectViewStatusCheckBox.setSelected(showProjectViewStatus); } public boolean getShowProjectViewStatus() { return showProjectViewStatusCheckBox.isSelected(); } public void setShowProjectViewLocationPath(boolean showProjectViewLocationPath) { showLocationPathCheckBox.setSelected(showProjectViewLocationPath); } public boolean getShowProjectViewLocationPath() { return showLocationPathCheckBox.isSelected(); } public void setShowProjectViewStatusBeforeLocation(boolean showProjectViewStatusBeforeLocation) { showStatusBeforeLocationCheckBox.setSelected(showProjectViewStatusBeforeLocation); } public boolean getShowProjectViewStatusBeforeLocation() { return showStatusBeforeLocationCheckBox.isSelected(); } public void setProjectViewStatusColor(@NotNull Color color) { projectViewStatusColorChooser.setColor(color); } @NotNull public Color getProjectViewStatusColor() { return projectViewStatusColorChooser.getColor(); } public void setProjectViewStatusColorEnabled(boolean enabled) { projectViewStatusColorChooser.setSelected(enabled); } public boolean getProjectViewStatusColorEnabled() { return projectViewStatusColorChooser.isSelected(); } public void setProjectViewStatusBold(boolean bold) { projectViewStatusBoldCheckBox.setSelected(bold); } public boolean getProjectViewStatusBold() { return projectViewStatusBoldCheckBox.isSelected(); } public void setProjectViewStatusItalic(boolean italic) { projectViewStatusItalicCheckBox.setSelected(italic); } public boolean getProjectViewStatusItalic() { return projectViewStatusItalicCheckBox.isSelected(); } }